home *** CD-ROM | disk | FTP | other *** search
/ Java 1996 August / Java - Summer 1996.iso / kaffe-0.2 / lib / native / java.util / java.util.Date.c next >
C/C++ Source or Header  |  1996-02-18  |  3KB  |  119 lines

  1. /*
  2.  * java.util.Date.c
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  11.  */
  12.  
  13. #include <time.h>
  14. #include <native.h>
  15. #include "java.util.Date.h"
  16.  
  17. /*
  18.  * Convert a date to a string.
  19.  */
  20. struct Hjava_lang_String*
  21. java_util_Date_toString(struct Hjava_util_Date* this)
  22. {
  23.     long date;
  24.     char* str;
  25.  
  26.     if (unhand(this)->valueValid == 0) {
  27.         java_util_Date_computeValue(this);
  28.     }
  29.     date = unhand(this)->value / 1000;
  30.     str = ctime(&date);
  31.     return(makeJavaString(str, strlen(str)));
  32. }
  33.  
  34. /*
  35.  * Convert a date to a string in the local timezone.
  36.  */
  37. struct Hjava_lang_String*
  38. java_util_Date_toLocaleString(struct Hjava_util_Date* this)
  39. {
  40.     long date;
  41.     char* str;
  42.  
  43.     if (unhand(this)->valueValid == 0) {
  44.         java_util_Date_computeValue(this);
  45.     }
  46.     date = unhand(this)->value / 1000;
  47.     str = asctime(localtime(&date));
  48.     return(makeJavaString(str, strlen(str)));
  49. }
  50.  
  51. /*
  52.  * Covert a date to a string in GMT timezone.
  53.  */
  54. struct Hjava_lang_String*
  55. java_util_Date_toGMTString(struct Hjava_util_Date* this)
  56. {
  57.     long date;
  58.     char* str;
  59.  
  60.     if (unhand(this)->valueValid == 0) {
  61.         java_util_Date_computeValue(this);
  62.     }
  63.     date = unhand(this)->value / 1000;
  64.     str = asctime(gmtime(&date));
  65.     return(makeJavaString(str, strlen(str)));
  66. }
  67.  
  68. /*
  69.  * Expand the single value into a split date.
  70.  */
  71. void
  72. java_util_Date_expand(struct Hjava_util_Date* this)
  73. {
  74.     struct tm* time;
  75.     long date;
  76.  
  77.     date = unhand(this)->value;
  78.     time = localtime(&date);
  79.  
  80.     unhand(this)->tm_millis = 0;
  81.     unhand(this)->tm_sec = time->tm_sec;
  82.     unhand(this)->tm_min = time->tm_min;
  83.     unhand(this)->tm_hour = time->tm_hour;
  84.     unhand(this)->tm_mday = time->tm_mday;
  85.     unhand(this)->tm_mon = time->tm_mon;
  86.     unhand(this)->tm_year = time->tm_year;
  87.     unhand(this)->tm_wday = time->tm_wday;
  88.     unhand(this)->tm_yday = time->tm_yday;
  89.     unhand(this)->tm_isdst = time->tm_isdst;
  90.  
  91.     unhand(this)->expanded = 1;
  92. }
  93.  
  94. /*
  95.  * Convert the split date into a single value.
  96.  */
  97. void
  98. java_util_Date_computeValue(struct Hjava_util_Date* this)
  99. {
  100.     struct tm time;
  101.  
  102.     time.tm_sec = unhand(this)->tm_sec;
  103.     time.tm_min = unhand(this)->tm_min;
  104.     time.tm_hour = unhand(this)->tm_hour;
  105.     time.tm_mday = unhand(this)->tm_mday;
  106.     time.tm_mon = unhand(this)->tm_mon;
  107.     time.tm_year = unhand(this)->tm_year;
  108.     time.tm_wday = unhand(this)->tm_wday;
  109.     time.tm_yday = unhand(this)->tm_yday;
  110.     time.tm_isdst = unhand(this)->tm_isdst;
  111. #if defined(HAVE_TM_ZONE)
  112.     time.tm_gmtoff = 0;
  113.     time.tm_zone = 0;
  114. #endif
  115.  
  116.     unhand(this)->valueValid = 1;
  117.     unhand(this)->value = 1000LL * (long long)mktime(&time);
  118. }
  119.